<?php
// 用户支付控制器

// 链接支付类
require_once("{$CfgPara->root}/class/pay.class.php");
$myPay = new CPay($CfgPara->database);

// 用户提交订单 ******************************************************************************
if (isset($InputData['PayOrder']) && isset($InputData['PayTool']) &&
    isset($InputData['PayTotalFee'])
) {
    // 写入订单数据表
    $order_id = '';
    $total_fee = 0;
    $result = $myPay->pay_neworder($InputData, $order_id, $total_fee);
    if ($result != 1) {
        echo $result;
        goto page_end;
    }
    // 开始支付
    $redirect_url = '';
    $result = $myPay->pay_submit($InputData['PayTool'], $total_fee, $order_id, $redirect_url);
    if ($result != 1) // 如果有错误 返回错误信息
    {
        echo $result;
        goto page_end;
    }
    // 返回结果 客户端浏览器跳转到重定向url
    $json_msg = array(
        "return_code" => 1,
        "redirect_url" => $redirect_url
    );
    // 如果使用余额支付 进入支付成功步骤 在支付成功步骤 再输出结果
    if ($InputData['PayTool'] == CPay::PayToolBalance) {
        $InputData['PayOk'] = 1;
        $InputData['PayOrderId'] = $order_id;
    } else  // 使用其它支付方式 直接输出结果
    {
        echo json_encode($json_msg);
    }
}

// 支付成功后 支付服务器（微信或支付宝或余额支付）将调用此页面通知本后台服务器********************************
if (isset($InputData['PayOk']) && isset($InputData['PayOrderId'])) {
    $orderData = $myPay->get_order_data($InputData['PayOrderId']);
    if (is_string($orderData)) {
        echo $orderData;
        goto page_end;
    }
    db_begin();
    // 如果使用余额支付 扣除余额
    if ($orderData->PayTool == CPay::PayToolBalance) {
        $result = $myPay->set_balance($orderData->TotalFee, 0);
        if (!is_numeric($result)) {
            echo $result;
            db_rollback();
            goto page_end;
        }
    }
    // 设置订单状态为支付完成
    $result = $myPay->set_order_pay_s($InputData['PayOrderId'], CPay::OrderState_PayOK);
    if ($result != 1) {
        echo $result;
        db_rollback();
        goto page_end;
    }
    // 根据订单的类型 保存订单的数据内容
    if ($orderData->Type == CPay::ConsumeType_Balance) {
        $result = $myPay->set_balance($orderData->TotalFee, 1); // 直接增加余额
        if (!is_numeric($result)) {
            echo $result;
            db_rollback();
            goto page_end;
        }
    } else {
        if ($orderData->Type == CPay::ConsumeType_WorkRelease) {
            // 连接作品数据模型 将已保存为草稿的作品发布
            require_once("{$CfgPara->root}/model/work.m.php");
            $myWork = new work_m();
            $result = $myWork->work_edit_release($orderData->SubId, $orderData->Id, $myPay);
        } elseif ($orderData->Type == CPay::ConsumeType_ShowRelease) {
            require_once("{$CfgPara->root}/model/shoe_show.m.php");
            $myShoeShow = new shoe_show_m();
            $result = $myShoeShow->show_edit_release($orderData->SubId, $orderData->Id, $myPay);
        } elseif ($orderData->Type == CPay::ConsumeType_FieldEdit) {
            $result = $myPay->pay_car_release($orderData->Id);
        }
        if ($result != 1) {
            echo $result;
            db_rollback();
            goto page_end;
        }
    }
    db_commit();
    if ($orderData->PayTool == CPay::PayToolBalance && isset($json_msg)) {
        echo json_encode($json_msg); // 输出结果 使浏览器跳转到订单查询页面
    }
}

// 提交订单并进行支付操作后（无论是否成功），支付服务器（微信或支付宝或余额支付的本服务器）将用户浏览器跳转到此页面*******
// 我们在此页面显示订单内容 并让在此页面自动去查询订单结果
if (isset($InputData['PayOrderFeedback']) && isset($InputData['PayOrderId'])) {
    if (!isset($orderData)) {
        $orderData = $myPay->get_order_data($InputData['PayOrderId']);
    }
    if (is_string($orderData)) {
        echo $orderData;
        goto page_end;
    }
    // 调用页面文件
    require("{$viewRoot}user_order{$viewEx}");
} // 用户查询订单结果********************************************************************************
elseif (isset($InputData['PayResultInquire']) && isset($InputData['PayOrderId'])) {
    if (!isset($orderData)) {
        $orderData = $myPay->get_order_data($InputData['PayOrderId']);
    }
    if (is_string($orderData)) {
        echo $orderData;
        goto page_end;
    }
    $payOK = 0;
    if ($orderData->State == 2) // 已完成支付
    {
        $payOK = 1;
    } else {
        if ($orderData->PayTool == CPay::PayToolWeiXin) // 到服务器查询订单结果
        {
            $orderState = $myPay->weixin_orderquery($InputData['PayOrderId']);
            if ($orderState == 1) {
                $payOK = 1;
                $myPay->set_order_pay_s($InputData['PayOrderId'], CPay::OrderState_PayOK);
            }
        }
    }
    // 返回结果 由客户端根据消费类型 跳转到相应的内容页面
    $json_msg = array(
        "return_code" => 1,
        "pay_result" => $payOK,
        "consume_type" => $orderData->Type
    );
    echo json_encode($json_msg);
}

page_end:;
